import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import sqlite3 as sq3
import numpy as np
#Q1
url = "https://raw.githubusercontent.com/bcaffo/MRIcloudT1volumetrics/master/inst/extdata/multilevel_lookup_table.txt"
multilevel_lookup = pd.read_csv(url, sep = "\t")
multilevel_lookup = multilevel_lookup.rename(columns = {
"modify" : "roi",
"modify.1" : "level4",
"modify.2" : "level3",
"modify.3" : "level2",
"modify.4" : "level1"})
multilevel_lookup = multilevel_lookup[['roi', 'level4', 'level3', 'level2', 'level1']]
multilevel_lookup.head()
# id = 127
subjectData = pd.read_csv("https://raw.githubusercontent.com/smart-stats/ds4bio_book/main/book/assetts/kirby21AllLevels.csv")
subjectData = subjectData.loc[(subjectData.type == 1) & (subjectData.level == 5) & (subjectData.id == 127)]
subjectData = subjectData[['roi', 'volume']]
## Merge the subject data with the multilevel data
subjectData = pd.merge(subjectData, multilevel_lookup, on = "roi")
subjectData = subjectData.assign(icv = "ICV")
subjectData = subjectData.assign(comp = subjectData.volume / np.sum(subjectData.volume))
print(subjectData.head())
comp_l1 = subjectData.groupby(['level1']).comp.sum().reset_index().rename(columns = {'comp' : 'comp'})
print(comp_l1)
a_l1=comp_l1.level1.unique()
a_l1=np.append(['ICV'], a_l1)
print(a_l1)
compl1value = comp_l1.comp.unique()
compl1value
comp_l2 = subjectData.groupby(['level1', 'level2']).comp.sum().reset_index().rename(columns = {'comp' : 'comp'})
print(comp_l2)
a_l2=comp_l2.level2.unique()
a_12=np.append(a_l1, a_l2)
print(a_12)
compl2value = comp_l2.comp.unique()
comp012value = np.append(compl1value,compl2value)
comp012value
roi volume level4 level3 level2 level1 \
0 SFG_L 12926 SFG_L Frontal_L CerebralCortex_L Telencephalon_L
1 SFG_R 10050 SFG_R Frontal_R CerebralCortex_R Telencephalon_R
2 SFG_PFC_L 12783 SFG_L Frontal_L CerebralCortex_L Telencephalon_L
3 SFG_PFC_R 11507 SFG_R Frontal_R CerebralCortex_R Telencephalon_R
4 SFG_pole_L 3078 SFG_L Frontal_L CerebralCortex_L Telencephalon_L
icv comp
0 ICV 0.009350
1 ICV 0.007270
2 ICV 0.009247
3 ICV 0.008324
4 ICV 0.002227
level1 comp
0 CSF 0.079417
1 Diencephalon_L 0.008548
2 Diencephalon_R 0.008362
3 Mesencephalon 0.007430
4 Metencephalon 0.115313
5 Myelencephalon 0.003599
6 Telencephalon_L 0.384220
7 Telencephalon_R 0.393111
['ICV' 'CSF' 'Diencephalon_L' 'Diencephalon_R' 'Mesencephalon'
'Metencephalon' 'Myelencephalon' 'Telencephalon_L' 'Telencephalon_R']
level1 level2 comp
0 CSF Sulcus_L 0.024577
1 CSF Sulcus_R 0.021714
2 CSF Ventricle 0.032536
3 CSF Ventricle 0.000590
4 Diencephalon_L BasalForebrain_L 0.003960
5 Diencephalon_L Thalamus_L 0.004588
6 Diencephalon_R BasalForebrain_R 0.003753
7 Diencephalon_R Thalamus_R 0.004609
8 Mesencephalon Mesencephalon_L 0.003577
9 Mesencephalon Mesencephalon_R 0.003853
10 Metencephalon Metencephalon_L 0.057506
11 Metencephalon Metencephalon_R 0.057807
12 Myelencephalon Myelencephalon_L 0.001738
13 Myelencephalon Myelencephalon_R 0.001861
14 Telencephalon_L CerebralCortex_L 0.200361
15 Telencephalon_L CerebralNucli_L 0.008956
16 Telencephalon_L WhiteMatter_L 0.174904
17 Telencephalon_R CerebralCortex_R 0.204623
18 Telencephalon_R CerebralNucli_R 0.009460
19 Telencephalon_R WhiteMatter_R 0.179029
['ICV' 'CSF' 'Diencephalon_L' 'Diencephalon_R' 'Mesencephalon'
'Metencephalon' 'Myelencephalon' 'Telencephalon_L' 'Telencephalon_R'
'Sulcus_L' 'Sulcus_R' 'Ventricle' 'Ventricle ' 'BasalForebrain_L'
'Thalamus_L' 'BasalForebrain_R' 'Thalamus_R' 'Mesencephalon_L'
'Mesencephalon_R' 'Metencephalon_L' 'Metencephalon_R' 'Myelencephalon_L'
'Myelencephalon_R' 'CerebralCortex_L' 'CerebralNucli_L' 'WhiteMatter_L'
'CerebralCortex_R' 'CerebralNucli_R' 'WhiteMatter_R']
array([0.07941665, 0.00854807, 0.00836216, 0.00742974, 0.11531317,
0.00359877, 0.38422026, 0.3931112 , 0.0245765 , 0.02171413,
0.03253647, 0.00058955, 0.00396045, 0.00458761, 0.00375284,
0.00460931, 0.00357707, 0.00385267, 0.05750649, 0.05780668,
0.00173826, 0.00186051, 0.20036053, 0.00895605, 0.17490368,
0.20462262, 0.00945951, 0.17902906])
## Q1 Sankey Diagram
import plotly.graph_objects as go
import urllib, json
fig = go.Figure(data=[go.Sankey(
node = dict(
pad = 15,
thickness = 20,
line = dict(color = "black", width = 0.5),
label = a_12,
color = "blue"
),
link = dict(
source = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 7, 8, 8, 8],
target = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28],
value = comp012value
))])
fig.update_layout(title_text="Brain Composition: Level 1 & 2 ", font_size=14)
fig.show()